home *** CD-ROM | disk | FTP | other *** search
- #!/usr/bin/perl -w
- # This file was preprocessed, do not edit!
-
-
- package Debconf::Question;
- use strict;
- use Debconf::Db;
- use Debconf::Template;
- use Debconf::Iterator;
- use Debconf::Log qw(:all);
-
-
- use fields qw(name priority);
-
- our %question;
-
-
- sub new {
- my Debconf::Question $this=shift;
- my $name=shift;
- my $owner=shift;
- my $type=shift || die "no type given for question";
- die "A question called \"$name\" already exists"
- if exists $question{$name};
- unless (ref $this) {
- $this = fields::new($this);
- }
- $this->{name}=$name;
- return unless defined $this->addowner($owner, $type);
- $this->flag('seen', 'false');
- return $question{$name}=$this;
- }
-
-
- sub get {
- my Debconf::Question $this=shift;
- my $name=shift;
- return $question{$name} if exists $question{$name};
- if ($Debconf::Db::config->exists($name)) {
- $this = fields::new($this);
- $this->{name}=$name;
- return $question{$name}=$this;
- }
- return undef;
- }
-
-
- sub iterator {
- my $this=shift;
-
- my $real_iterator=$Debconf::Db::config->iterator;
- return Debconf::Iterator->new(callback => sub {
- return unless my $name=$real_iterator->iterate;
- return $this->get($name);
- });
- }
-
-
- sub _expand_vars {
- my $this=shift;
- my $text=shift;
-
- return '' unless defined $text;
-
- my @vars=$Debconf::Db::config->variables($this->{name});
-
- my $rest=$text;
- my $result='';
- my $variable;
- my $varval;
- my $escape;
- while ($rest =~ m/^(.*?)(\\)?\${([^{}]+)}(.*)$/sg) {
- $result.=$1; # copy anything before the variable
- $escape=$2;
- $variable=$3;
- $rest=$4; # continue trying to expand rest of text
- if (defined $escape && length $escape) {
- $result.="\${$variable}";
- }
- else {
- $varval=$Debconf::Db::config->getvariable($this->{name}, $variable);
- $result.=$varval if defined($varval); # expand the variable
- }
- }
- $result.=$rest; # add on anything that's left.
-
- return $result;
- }
-
-
- sub description {
- my $this=shift;
- return $this->_expand_vars($this->template->description);
- }
-
-
- sub extended_description {
- my $this=shift;
- return $this->_expand_vars($this->template->extended_description);
- }
-
-
- sub choices {
- my $this=shift;
-
- return $this->_expand_vars($this->template->choices);
- }
-
-
- sub choices_split {
- my $this=shift;
-
- my @items;
- my $item='';
- for my $chunk (split /(\\[, ]|,\s+)/, $this->choices) {
- if ($chunk=~/^\\([, ])$/) {
- $item.=$1;
- } elsif ($chunk=~/^,\s+$/) {
- push @items, $item;
- $item='';
- } else {
- $item.=$chunk;
- }
- }
- push @items, $item if $item ne '';
- return @items;
- }
-
-
- sub variable {
- my $this=shift;
- my $var=shift;
-
- if (@_) {
- return $Debconf::Db::config->setvariable($this->{name}, $var, shift);
- }
- else {
- return $Debconf::Db::config->getvariable($this->{name}, $var);
- }
- }
-
-
- sub flag {
- my $this=shift;
- my $flag=shift;
-
- if ($flag eq 'isdefault') {
- debug developer => "The isdefault flag is deprecated, use the seen flag instead";
- if (@_) {
- my $value=(shift eq 'true') ? 'false' : 'true';
- $Debconf::Db::config->setflag($this->{name}, 'seen', $value);
- }
- return ($Debconf::Db::config->getflag($this->{name}, 'seen') eq 'true') ? 'false' : 'true';
- }
-
- if (@_) {
- return $Debconf::Db::config->setflag($this->{name}, $flag, shift);
- }
- else {
- return $Debconf::Db::config->getflag($this->{name}, $flag);
- }
- }
-
-
- sub value {
- my $this = shift;
-
- unless (@_) {
- my $ret=$Debconf::Db::config->getfield($this->{name}, 'value');
- return $ret if defined $ret;
- return $this->template->default if ref $this->template;
- } else {
- return $Debconf::Db::config->setfield($this->{name}, 'value', shift);
- }
- }
-
-
- sub value_split {
- my $this=shift;
-
- my $value=$this->value;
- $value='' if ! defined $value;
- my @items;
- my $item='';
- for my $chunk (split /(\\[, ]|,\s+)/, $value) {
- if ($chunk=~/^\\([, ])$/) {
- $item.=$1;
- } elsif ($chunk=~/^,\s+$/) {
- push @items, $item;
- $item='';
- } else {
- $item.=$chunk;
- }
- }
- push @items, $item if $item ne '';
- return @items;
- }
-
-
- sub addowner {
- my $this=shift;
-
- return $Debconf::Db::config->addowner($this->{name}, shift, shift);
- }
-
-
- sub removeowner {
- my $this=shift;
-
- my $template=$Debconf::Db::config->getfield($this->{name}, 'template');
- return unless $Debconf::Db::config->removeowner($this->{name}, shift);
- if (length $template and
- not $Debconf::Db::config->exists($this->{name})) {
- $Debconf::Db::templates->removeowner($template, $this->{name});
- delete $question{$this->{name}};
- }
- }
-
-
- sub owners {
- my $this=shift;
-
- return join(", ", sort($Debconf::Db::config->owners($this->{name})));
- }
-
-
- sub template {
- my $this=shift;
- if (@_) {
- my $oldtemplate=$Debconf::Db::config->getfield($this->{name}, 'template');
- my $newtemplate=shift;
- if (not defined $oldtemplate or $oldtemplate ne $newtemplate) {
- $Debconf::Db::templates->removeowner($oldtemplate, $this->{name})
- if defined $oldtemplate and length $oldtemplate;
-
- $Debconf::Db::config->setfield($this->{name}, 'template', $newtemplate);
-
- $Debconf::Db::templates->addowner($newtemplate, $this->{name},
- $Debconf::Db::templates->getfield($newtemplate, "type"));
- }
- }
- return Debconf::Template->get(
- $Debconf::Db::config->getfield($this->{name}, 'template'));
- }
-
-
- sub name {
- my $this=shift;
-
- return $this->{name};
- }
-
-
- sub priority {
- my $this=shift;
-
- $this->{priority}=shift if @_;
-
- return $this->{priority};
- }
-
-
- sub AUTOLOAD {
- (my $field = our $AUTOLOAD) =~ s/.*://;
-
- no strict 'refs';
- *$AUTOLOAD = sub {
- my $this=shift;
-
- if (@_) {
- return $Debconf::Db::config->setfield($this->{name}, $field, shift);
- }
- my $ret=$Debconf::Db::config->getfield($this->{name}, $field);
- unless (defined $ret) {
- $ret = $this->template->$field() if ref $this->template;
- }
- if (defined $ret) {
- if ($field =~ /^(?:description|extended_description|choices)-/i) {
- return $this->_expand_vars($ret);
- } else {
- return $ret;
- }
- }
- };
- goto &$AUTOLOAD;
- }
-
- sub DESTROY {
- }
-
-
- 1
-